package exception;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * finally块测试
 * */
public class FinallyDemo2 {
    public static void main(String[] args) {
        /*
         * 为什么在这个位置对FineOutputStream进行初始化
         * 如果FileOutputStream定义在try方法体中，此时此变量的作用域只能在try块中 finally想执行fis.close关闭流就会编译错误
         *
         * 为什么要赋初始值，而不是直接创建一个变量?
         * 因为当try中的对fis赋值时出现错误后 会直接去执行catch 然后就会执行finall如果fis中没有初始值的话就出出现空指针异常
         * */
        FileOutputStream fis = null;
        try {
            fis = new FileOutputStream("./fos.dat");
            fis.write(1);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //因为我们fis的初始化值为 null，因此我们要判断一下fis中的实例是否是不为空的数据
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
